package com.dc.project.service;

import com.dc.project.entity.bo.TaskFileCommitBo;
import com.dc.project.entity.map.TaskFileCommitMapVo;
import com.dc.project.entity.po.TaskFileCommit;
import com.dc.project.entity.query.TaskFileCommitQuery;
import com.dc.project.entity.vo.TaskFileCommitVo;
import com.own.component.common.base.service.BaseService;

import java.io.File;
import java.util.List;

/**
 * TaskFileCommitService
 *
 * @author chenxueli
 * @date 2025-03-10 16:37:53
 */
public interface TaskFileCommitService extends BaseService<
        TaskFileCommit,
        TaskFileCommitBo,
        TaskFileCommitVo,
        TaskFileCommitMapVo,
        TaskFileCommitQuery
        > {

    /**
     * 根据任务id查询所有提交的文件
     *
     * @param taskId 任务id
     * @return 提交的文件列表
     */
    List<TaskFileCommit> listByTaskId(Long taskId);

    /**
     * 根据任务id查询所有提交的文件
     *
     * @param taskId   任务id
     * @param detailId 详情id
     * @param itemId   项目id
     * @return 提交的文件列表
     */
    List<TaskFileCommit> listByTaskId(Long taskId, Long detailId, Long itemId);

    /**
     * 根据任务id查询可用的提交文件的结构体（用于大模型处理）
     *
     * @param taskId   任务id
     * @param detailId 详情id
     * @param itemId   项目id
     * @return 提交文件的结构体
     */
    List<TaskFileCommit.Structure> listAvailableStructureByTaskId(Long taskId, Long detailId, Long itemId);

    /**
     * 获取第一条未处理完成的提交信息
     *
     * @return 提交的文件信息
     */
    TaskFileCommit getFirstNotCompleteDetail();

    /**
     * 修改状态
     *
     * @param id     任务详情id
     * @param status 状态
     */
    void updateStatus(Long id, int status);

    /**
     * 修改解析后的文本内容
     *
     * @param id      任务详情id
     * @param content 内容
     *
     */
    void updateParseMessage(Long id, String content);

    /**
     * 修改压缩后的文本内容
     *
     * @param id      任务详情id
     * @param content 内容
     */
    void updateCompressMessage(Long id, String content);

    /**
     * 添加子文件列表到提交记录中
     *
     * @param parentCommit 父提交记录
     * @param subFileList  子文件列表
     */
    void putSubFileList(TaskFileCommit parentCommit, List<File> subFileList);

    /**
     * 重新执行解析
     *
     * @param commitId 提交记录id
     */
    void reparse(Long commitId);

    /**
     * 验证父文件信息是否已经全部解析完成
     *
     * @param commitId 父提交记录id
     * @return true-完成，false-未完成
     */
    boolean checkSubComplete(Long commitId);

    /**
     * 根据父提交记录id查询所有子提交记录
     *
     * @param commitId 父提交记录id
     * @return 子提交记录列表
     */
    List<TaskFileCommit> listByParentCommitId(Long commitId);

    /**
     * 根据父提交记录id删除所有子提交记录
     *
     * @param parentCommitId 父提交记录id
     */
    void deleteByParentCommitId(Long parentCommitId);

}

